/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef __FPS_SKY_BOX_SCENE_NODE_H_INCLUDED__
#define __FPS_SKY_BOX_SCENE_NODE_H_INCLUDED__

#include "IMeshSceneNode.h"

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct SkyboxNodeEntry
{
public:
	SkyboxNodeEntry(irr::scene::ISceneNode* n) :Node(n)
		{
		}

	bool operator < (const SkyboxNodeEntry& other) const
	{
		return Node->getRenderingLayer() < other.Node->getRenderingLayer();
	}


	irr::scene::ISceneNode*		Node;
};

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Skybox, rendered with zbuffer turned off, before all other nodes.
class FpsSkyBoxSceneNode : public irr::scene::ISceneNode
{
public:

	//! constructor
	FpsSkyBoxSceneNode(const char *meshFilename, irr::s32 id = -1);
	virtual ~FpsSkyBoxSceneNode();

	virtual void OnRegisterSceneNode();

	virtual void OnAnimate(irr::u32 timeMs);

	//! renders the node.
	virtual void render(void* renderData = 0);

	//! renders the node in mirror.
	void renderMirror();

	//! returns the axis aligned bounding box of this node
	virtual const irr::core::aabbox3d<irr::f32>& getBoundingBox() const;

	//! Returns type of the scene node
	virtual irr::scene::ESCENE_NODE_TYPE getType() const { return irr::scene::ESNT_SKY_BOX; }

	//! Creates a clone of this scene node and its children.
	virtual irr::scene::ISceneNode* clone(irr::scene::ISceneNode* newParent=0, irr::scene::ISceneManager* newManager=0); 

protected:

	void collectSkyboxNodes(irr::scene::ISceneNode*	node);

	irr::scene::ISceneNode*			m_node;
	irr::scene::IMeshSceneNode*		m_meshNode;
	irr::core::aabbox3d<irr::f32>	m_box;

	irr::core::array<SkyboxNodeEntry>	SkyboxNodeList;

};

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
